home *** CD-ROM | disk | FTP | other *** search
- package org.apache.xalan.xslt;
-
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.net.MalformedURLException;
- import java.util.Stack;
- import java.util.Vector;
- import org.apache.xalan.xpath.XObject;
- import org.apache.xalan.xpath.XRTreeFrag;
- import org.apache.xalan.xpath.xml.QName;
- import org.w3c.dom.DocumentFragment;
- import org.w3c.dom.Node;
- import org.xml.sax.SAXException;
-
- class VariableStack extends Stack {
- private static final Integer contextMarker = new Integer(0);
- private static final Arg m_elemFrameBoundry = new Arg();
- private int m_globalStackFrameIndex = -1;
- private int m_currentStackFrameIndex;
-
- public void markGlobalStackFrame() {
- this.m_globalStackFrameIndex = ((Vector)this).size();
- this.push(contextMarker);
- }
-
- void setCurrentStackFrameIndex(int var1) {
- this.m_currentStackFrameIndex = var1;
- }
-
- int getCurrentStackFrameIndex() {
- return this.m_currentStackFrameIndex;
- }
-
- VariableStack() {
- this.pushContextMarker();
- }
-
- void pushContextMarker() {
- this.push(contextMarker);
- }
-
- public Object push(Object var1) {
- if (this.m_currentStackFrameIndex == ((Vector)this).size()) {
- ++this.m_currentStackFrameIndex;
- }
-
- return super.push(var1);
- }
-
- public Object pop() {
- if (this.m_currentStackFrameIndex == ((Vector)this).size()) {
- --this.m_currentStackFrameIndex;
- }
-
- return super.pop();
- }
-
- public void setStackSize(int var1) {
- boolean var2 = this.m_currentStackFrameIndex == ((Vector)this).size();
- ((Vector)this).setSize(var1);
- if (var2) {
- this.m_currentStackFrameIndex = ((Vector)this).size();
- }
-
- }
-
- void popCurrentContext() {
- int var1 = ((Vector)this).size();
-
- for(int var2 = var1 - 1; var2 >= 0; --var2) {
- if (((Vector)this).elementAt(var2) == contextMarker) {
- this.setStackSize(var2);
- return;
- }
- }
-
- }
-
- public void pushVariable(QName var1, XObject var2) {
- this.push(new Arg(var1, var2, false));
- }
-
- void pushParams(XSLTEngineImpl var1, Stylesheet var2, ElemTemplateElement var3, Node var4, Node var5, QName var6) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
- for(ElemTemplateElement var7 = (ElemTemplateElement)var3.getFirstChild(); var7 != null; var7 = var7.m_nextSibling) {
- if (var7.getXSLToken() == 2) {
- ElemWithParam var8 = (ElemWithParam)var7;
- Object var9;
- if (var8.m_selectPattern != null) {
- var9 = var8.m_selectPattern.execute(var1.getXMLProcessorLiaison(), var5, var8);
- } else {
- DocumentFragment var10 = var1.createResultTreeFrag(var2, var8, var4, var5, var6);
- var9 = new XRTreeFrag(var10);
- }
-
- this.push(new Arg(var8.m_qname, (XObject)var9, true));
- }
- }
-
- }
-
- public XObject getParamVariable(QName var1) throws SAXException {
- XObject var2 = null;
- int var3 = this.getCurrentStackFrameIndex();
-
- for(int var4 = var3 - 1; var4 >= 0; --var4) {
- Object var5 = ((Vector)this).elementAt(var4);
- if (var5 == contextMarker) {
- break;
- }
-
- if (((Arg)var5).equals(var1)) {
- var2 = ((Arg)var5).m_val;
- break;
- }
- }
-
- return var2;
- }
-
- public Object getVariable(QName var1) throws SAXException {
- int var2 = this.getCurrentStackFrameIndex();
-
- for(int var3 = var2 - 1; var3 >= 0; --var3) {
- Object var4 = ((Vector)this).elementAt(var3);
- if (var4 == contextMarker) {
- break;
- }
-
- if (((Arg)var4).equals(var1)) {
- return ((Arg)var4).m_val;
- }
- }
-
- for(int var6 = this.m_globalStackFrameIndex - 1; var6 >= 2; --var6) {
- Object var5 = ((Vector)this).elementAt(var6);
- if (var5 == contextMarker) {
- break;
- }
-
- if (((Arg)var5).equals(var1)) {
- return ((Arg)var5).m_val;
- }
- }
-
- return null;
- }
-
- public void pushElemFrame(ElemTemplateElement var1) {
- this.push(m_elemFrameBoundry);
- }
-
- void popElemFrame(ElemTemplateElement var1) {
- int var2 = ((Vector)this).size();
-
- for(int var3 = var2 - 1; var3 >= 0; --var3) {
- Object var4 = ((Vector)this).elementAt(var3);
- if (var4 == contextMarker) {
- return;
- }
-
- if (var4 == m_elemFrameBoundry) {
- this.setStackSize(var3);
- return;
- }
- }
-
- }
- }
-